package org.theSeed.springDynamicDatasource.utils;

import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import org.theSeed.base.exp.ServiceExp;

/**
 * 动态数据源工具
 */
@Slf4j
public class DynamicDataSourceUtil {
    // 本地线程共享变量
    private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();

    private static String defaultDb;

    public static void setDefaultDb(String defaultDb) {
        if (ObjectUtil.isNull(DynamicDataSourceUtil.defaultDb)){
            DynamicDataSourceUtil.defaultDb = defaultDb;
            return;
        }
        throw new ServiceExp("默认数据源已经配置，不允许修改");
    }

    /**
     * 设置数据源
     * @param dbType
     */
    public static void setDB(String dbType) {
        log.info("动态数据源切换至" + dbType + "数据源");
        contextHolder.set(dbType);
    }

    /**
     * 获取数据源
     * @return
     */
    public static String getDB() {
        return ObjectUtil.isNotNull(contextHolder.get())?contextHolder.get():defaultDb;
    }

    /**
     * 清除数据源
     */
    public static void clearDB() {
        contextHolder.remove();
    }
}
